from keras.preprocessing.image import ImageDataGenerator

def classification (batch_size = 20, epochs = 20, img_width = 150,
                    img_height = 150, num_train_samples = 2000, 
                    num_validation_samples = 800):
    model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

    # augmentation processes for the train set
    train_datagen = ImageDataGenerator (  
        rescale = 1./255.,
        rotation_range = 25,
        width_shift_range = 0.2,
        height_shift_range = 0.2,
        zoom_range = 0.3,
        horizontal_flip = True,
        fill_mode = 'nearest'
    )
    
    test_datagen = ImageDataGenerator(rescale=1./255.)

    train_data_dir = 'Datasets/DogsCats/train'
    validation_data_dir = 'Datasets/DogsCats/validation'
    
    train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode='binary')

    validation_generator = test_datagen.flow_from_directory(
        validation_data_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode='binary')

    history = model.fit_generator(
        train_generator,
        steps_per_epoch = 4000 // batch_size,    
        epochs = 20,
        validation_data = validation_generator, 
        validation_steps = 1200 // batch_size,   
        verbose = 1)
    
    return(history)
